"""
@Author  : 康帅
@Time    : 2021/3/22 14:06
@Function: Iterable对象
"""

"""
生成器（Generator）不但可以作用于for循环，还可以被next（）函数不断调用并返回下一个值，直到最后抛出StopIteration错误，表示无法继续返回下一个值。
可以被next（）函数调用并不断返回下一个值的对象称为迭代器（Iterator）
"""

# 方法一：使用()定义生成器
data = (i * i for i in range(10))


# 方法二：使用yield定义generator函数
def fibonacci(max_num):
    """ 斐波那契数列的生成器 """
    a = b = 1
    for i in range(max_num):
        yield a
        a, b = b, a + b


if __name__ == '__main__':
    print("方法一：0~9的平方数")
    for e in data:
        print(e, end="\t")
    print()

    print("方法二：斐波那契数列")
    fib = fibonacci(10)
    for n in fib:
        print(n, end="\t")
    print()

    print("方法三：内置for循环")
    arr = [i * i for i in range(10)]
    for e in arr:
        print(e, end="\t")
    print()

    print()
    print(type(data))
    print(type(fib))
    print(type(arr))
